package com.woniuxy.uumsserver.service.impl;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.jwt.JWTUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.woniuxy.common.dto.UserDto;
import com.woniuxy.uumsserver.pojo.FinanceUser;
import com.woniuxy.uumsserver.service.FinanceUserService;
import com.woniuxy.uumsserver.mapper.FinanceUserMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
* @author 76169
* @description 针对表【finance_user】的数据库操作Service实现
* @createDate 2024-12-17 18:57:55
*/
@Service
public class FinanceUserServiceImpl extends ServiceImpl<FinanceUserMapper, FinanceUser>
    implements FinanceUserService{

    public static final String WONIU="woniu";

    @Autowired
    private StringRedisTemplate redisTemplate;

    @Override
    public String login(String username, String password) {
        //1.把密码加密
        password = SecureUtil.md5(SecureUtil.md5(password)+"woniu");//"woniu"盐值

        // 2.根据用户名和密码查询用户
        FinanceUser user = lambdaQuery().eq(FinanceUser::getFinanceAccount, username)
                .eq(FinanceUser::getFinancePwd, password)
                .one();

        // 3.判断用户是否存在，如果存在返回jwt
        if(ObjectUtil.isNull(user)){
            return null;
        }

        //生成JWT                   map数组设置为1，因为只存储了一个user对象
        Map<String, Object> map = new HashMap<>(1);
        //脱敏，将敏感信息拿掉，1.敏感信息设置为null  2.存DTO，不包含敏感信息
        UserDto userDto=new UserDto();
        BeanUtils.copyProperties(user,userDto);
        map.put("user",userDto);
        //使用工具包生成JWT
        String token = JWTUtil.createToken(map, WONIU.getBytes());

        //保存到缓存redis中
        redisTemplate.opsForValue().set(token,token,30, TimeUnit.MINUTES);
        return token;
    }
}




